/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ar.edu.unju.fi.reservahabitaciones.grupo14.struts.actions;

import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.forms.RegistroAbmForm;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.modelo.dao.HabitacionDao;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.modelo.dao.HuespedDao;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.modelo.dao.RegistroDao;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.modelo.dominio.Habitacion;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.modelo.dominio.Huesped;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.modelo.dominio.Registro;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.spring.servicios.ServicioFacade;
import ar.edu.unju.fi.reservahabitaciones.grupo14.struts.spring.servicios.SpringUtil;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.hibernate.PropertyValueException;
import org.hibernate.exception.ConstraintViolationException;

/**
 *
 * @author mauriljb
 */
public class RegistroAbmAction extends DispatchAction {

    /*
     * forward name="success" path=""
     */
    ServicioFacade servicio = (ServicioFacade) SpringUtil.getBean("servicioFacade");
    private static final String SUCCESS = "success";
    private static final String ERROR = "error";
     private static final String ERROR2 = "error2";

    
    public ActionForward beforeInsert(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
            RegistroAbmForm registroAbmForm = (RegistroAbmForm) form;
            //Obtener Habitacion por ID            
            long id = Long.parseLong(request.getParameter("habitacionId"));
            HabitacionDao habitacionDao = servicio.getHabitacionDao();
            Habitacion habitacion = habitacionDao.getHabitacion(id);
            /*
             * Asignar datos de la Habitacion obtenida
             * al Form
             */
            registroAbmForm.setNumeroHabitacion(String.valueOf(habitacion.getNumeroHabitacion()));
            registroAbmForm.setCategoriaHabitacion(habitacion.getCategoria().getDescripcion());
            registroAbmForm.setTipoHabitacion(habitacion.getTipoHabitacion().getDescripcion());
            registroAbmForm.setNumeroPiso(String.valueOf(habitacion.getNumeroPiso()));
            registroAbmForm.setEvent("insert");
          return mapping.findForward("beforeInsert");        
    }
    
      public ActionForward insert(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
       
                   RegistroDao registroDao = servicio.getRegistroDao();
            HabitacionDao habitacionDao = servicio.getHabitacionDao();
            
            Registro registro = servicio.getRegistro();
            Habitacion habitacion = servicio.getHabitacion();
            HuespedDao huespedDao = servicio.getHuespedDao();
            RegistroAbmForm registroAbmForm = (RegistroAbmForm) form;
            long dni = Long.parseLong(registroAbmForm.getDniHuesped());
            Huesped huesped = servicio.getHuesped();
           
         
            //Obtencion de Fecha del sistema
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
            Date s = new Date();
            String fecha = sdf.format(s);
            registro.setFechaReserva(sdf.parse(fecha));
            registro.setFechaCreacion(sdf.parse(fecha));
            registro.setFechaModificacion(sdf.parse(fecha));
            registro.setFechaLlegada(sdf.parse(registroAbmForm.getFechaLlegada()));
            
            registro.setCantidadDias(Short.parseShort(registroAbmForm.getEstadia()));
            for(Huesped h : huespedDao.getAll()){
                if(dni == h.getDni()){
                    huesped = h;
                }
            }
            long id = Long.parseLong(registroAbmForm.getHabitacionId());
            for(Habitacion h : habitacionDao.getAll()){
                if(h.getHabitacionId() == id){
                    habitacion = h;                  
                }
            }
            registro.setHuesped(huesped);
            registro.setHabitacion(habitacion);
            registroDao.insert(registro);
            habitacion.setEstado("RESERVADA");
            habitacionDao.update(habitacion);
            return mapping.findForward(SUCCESS);                  
        
         
         
      }    
}
